package org.spring.aop;

/**
 * 由持有 AOP 代理工厂配置的类实现的接口。此配置包括拦截器和其他建议、顾问和代理接口。
 * <p>
 * 从 Spring 获得的任何 AOP 代理都可以转换为该接口，以允许操作其 AOP 建议。
 *
 * @author 李坤
 * @date 2022/4/18 11:02
 */
public interface Advised extends TargetClassAware {

    /**
     * 返回此 {@code Advised} 对象使用的 {@code TargetSource}。
     */
    TargetSource getTargetSource();

    /**
     * 更改此 {@code Advised} 对象使用的 {@code TargetSource}。
     * <p>
     * 仅当配置不是 {@linkplain isFrozen freeze} 时才有效。
     *
     * @param targetSource 要使用的新 TargetSource
     */
    void setTargetSource(TargetSource targetSource);

    /**
     * 返回由 AOP 代理代理的接口。
     * <p>
     * 不包括也可能被代理的目标类。
     */
    Class<?>[] getProxiedInterfaces();

}
